package router

import (
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"io/ioutil"
	"myBlog/utils"
)

func getFolders(c *gin.Context) {
	folders := utils.GetFolders(c.Query("path"))
	jfolders, err := json.Marshal(folders)
	if err != nil {
		c.Error(err)
	}
	c.JSON(200, gin.H{
		"folders": string(jfolders),
	})
}

func getFiles(c *gin.Context) {
	files := utils.GetFiles(c.Query("path"))
	jfiles, err := json.Marshal(files)
	if err != nil {
		c.Error(err)
	}
	c.JSON(200, gin.H{
		"files": string(jfiles),
	})
}

// getAllThing 获取所有的文件包括文件夹
func getAllThing(c *gin.Context) {
	files := utils.GetAllThing(c.Query("path"))
	fmt.Println(files)
	jfiles, err := json.Marshal(files)
	if err != nil {
		c.Error(err)
	}
	c.JSON(200, gin.H{
		"files": string(jfiles),
	})
}

// uploadFile 上传一个文件
func uploadFile(c *gin.Context) {
	h, err := c.FormFile("file")
	if err != nil {
		c.Error(err)
	}
	name := c.PostForm("name")
	path := c.PostForm("path")
	path = path + "\\" + name
	path = utils.DealPath(path)
	err = c.SaveUploadedFile(h, path)
	if err != nil {
		c.Error(err)
	}
	c.JSON(200, gin.H{})
}

func addFolder(c *gin.Context) {
	name := c.Query("name")
	path := c.Query("path") + "\\" + name
	err := utils.AddFolderFromPath(path)
	if err != nil {
		c.Error(err)
	}
	c.JSON(200, gin.H{})
}

// deleteFile 删除一个文件
func deleteFile(c *gin.Context) {
	err := utils.DeleteFile(c.Query("path") + "\\" + c.Query("name"))
	if err != nil {
		fmt.Println(err)
		c.Error(err)
	}
	fmt.Println(c.Query("path"), c.Query("name"))
	c.JSON(200, gin.H{})
}

type myFile struct {
	Path    string
	Content string
}

// 修改文件内容
func updateFile(c *gin.Context) {
	var file myFile
	c.ShouldBindJSON(&file)
	fmt.Println(file)
	err := ioutil.WriteFile(utils.DealPath(file.Path), []byte(file.Content), 0666)
	if err != nil {
		c.Error(err)
	}
}

func InitFile(r *gin.Engine) {
	g := r.Group("/file")
	g.POST("/fetchFolders", getFolders)
	g.POST("/fetchFiles", getFiles)
	g.POST("/fetchAllThing", getAllThing)
	g.POST("/uploadFile", uploadFile)
	g.POST("/addFolder", addFolder)
	g.POST("/delFile", deleteFile)
	g.POST("/updateFile", updateFile)
}
